<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>757. 设置交集大小至少为2</title>
</head>
<body>
  <script>
//     给你一个二维整数数组 intervals ，其中 intervals[i] = [starti, endi] 表示从 starti 到 endi 的所有整数，包括 starti 和 endi 。

// 包含集合 是一个名为 nums 的数组，并满足 intervals 中的每个区间都 至少 有 两个 整数在 nums 中。

// 例如，如果 intervals = [[1,3], [3,7], [8,9]] ，那么 [1,2,4,7,8,9] 和 [2,3,4,8,9] 都符合 包含集合 的定义。
// 返回包含集合可能的最小大小。

 

// 示例 1：

// 输入：intervals = [[1,3],[3,7],[8,9]]
// 输出：5
// 解释：nums = [2, 3, 4, 8, 9].
// 可以证明不存在元素数量为 4 的包含集合。
// 示例 2：

// 输入：intervals = [[1,3],[1,4],[2,5],[3,5]]
// 输出：3
// 解释：nums = [2, 3, 4].
// 可以证明不存在元素数量为 2 的包含集合。 
// 示例 3：

// 输入：intervals = [[1,2],[2,3],[2,4],[4,5]]
// 输出：5
// 解释：nums = [1, 2, 3, 4, 5].
// 可以证明不存在元素数量为 4 的包含集合。 
 

// 提示：

// 1 <= intervals.length <= 3000
// intervals[i].length == 2
// 0 <= starti < endi <= 108

/**
 * @param {number[][]} intervals
 * @return {number}
 */
var intersectionSizeTwo = function(intervals) {
    const n = intervals.length;
    let res = 0;
    let m = 2;
    intervals.sort((a, b) => {
        if (a[0] === b[0]) {
            return b[1] - a[1];
        }
        return a[0] - b[0];
    });
    const temp = new Array(n).fill(0);
    for (let i = 0; i < n; i++) {
        temp[i] = [];
    }

    const help = (intervals, temp, pos, num) => {
        for (let i = pos; i >= 0; i--) {
            if (intervals[i][1] < num) {
                break;
            }
            temp[i].push(num);
        }
    }

    for (let i = n - 1; i >= 0; i--) {
        for (let j = intervals[i][0], k = temp[i].length; k < m; j++, k++) {
            res++;
            help(intervals, temp, i - 1, j);
        }
    }
    return res;
};
  </script>
</body>
</html>